package com.winit.cloudlink.common.utils;

import com.alibaba.fastjson.serializer.SerializerFeature;

import java.nio.charset.CharsetDecoder;

/**
 * Created by ye.liu on 2014/4/16.
 */
public class JSON {
    /**
     * Object可以是POJO，也可以是Collection或数组。 如果对象为Null, 返回"null". 如果集合为空集合, 返回"[]".
     */
    public static String toJSONString(Object object) {
        if (object == null) {
            return null;
        }
        return com.alibaba.fastjson.JSON.toJSONString(object, SerializerFeature.WriteClassName, SerializerFeature.DisableCircularReferenceDetect);
    }

    /**
     * 反序列化POJO或简单Collection如List<String>.
     * <p/>
     * 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合.
     * <p/>
     * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String, JavaType)
     */
    public static <T> T parseObject(String jsonString, Class<T> clazz) {
        if (null == jsonString || "".equals(jsonString.trim())) {
            return null;
        }
        return (T) com.alibaba.fastjson.JSON.parseObject(jsonString, clazz);
    }

    /**
     * 反序列化POJO或简单Collection如List<String>.
     * <p/>
     * 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合.
     * <p/>
     * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String, JavaType)
     */
    public static <T> T parseObject(String jsonString) {
        if (null == jsonString || "".equals(jsonString.trim())) {
            return null;
        }
        return (T) com.alibaba.fastjson.JSON.parse(jsonString);
    }

    public static byte[] toJSONBytes(Object object) {
        return com.alibaba.fastjson.JSON.toJSONBytes(object, SerializerFeature.WriteClassName, SerializerFeature.DisableCircularReferenceDetect);
    }

    public static <T> T parseObject(byte[] bytes) {
        return (T) com.alibaba.fastjson.JSON.parse(bytes);
    }
}

